home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 037a / wedits22.zip / WESTRING.PAS < prev    next >
Pascal/Delphi Source File  |  1991-08-14  |  4KB  |  161 lines

  1. UNIT WEString;
  2. { -- This is the Low Level Strings unit of WWIVEdit 2.2
  3.   -- Last Updated : 8/14/91
  4.   -- Written By:
  5.   --   Adam Caldwell
  6.   --
  7.   -- This code is Public Domain
  8.   --
  9.   -- Purpose : Provide Low level string manipulation routines
  10.   --
  11.   -- Know Errors: None
  12.   --
  13.   -- Planned Enhancements : Improvement of Go_Left and Go_Right
  14.   --
  15.   -- }
  16. {$R-,V-,S-,B-,E-,N-}   { These Optomize things as much as possible }
  17.  
  18. INTERFACE
  19.  
  20. FUNCTION  cstr(i:longint):string;   { Converts a number to a string            }
  21. FUNCTION  ZExpand(i:LongInt;        { Converts an integer into a string and    }
  22.                 len : byte):string;{ and adds enough zeros at the beginning   }
  23.                                    { to make is LEN characters long           }
  24. FUNCTION  Dup(c:char; n:integer)    { Returns a string of length "n" full of   }
  25.                : string;           { character "c"                            }
  26. FUNCTION  value(I : string) : integer;
  27. FUNCTION  TransformString(s:string):string;
  28. PROCEDURE StripEndString(VAR s:string);
  29. FUNCTION  GoLeft(s:string; i:byte):byte;
  30. FUNCTION  GoRight(s:string; i:byte):byte;
  31. FUNCTION  LengthW(s:string):integer;
  32. FUNCTION  LeftS(s:string; n:integer):string; {Returns the Left N characters }
  33. FUNCTION  RightS(s:string; n:integer):string;{Returns the Right N characters }
  34. FUNCTION  CmpLeft(source, Target:string):boolean;
  35. FUNCTION  CmpLeftI(source,target:string):boolean;
  36.  
  37. IMPLEMENTATION
  38.  
  39. FUNCTION CmpLeft(source,target:string):boolean;
  40. BEGIN
  41.   CmpLeft:=LeftS(source,Length(target))=target;
  42. END;
  43.  
  44. FUNCTION CmpLeftI(source,target:string):boolean;
  45. BEGIN
  46.   CmpLeftI:=CmpLeft(TransformString(source),TransformString(target));
  47. END;
  48.  
  49. FUNCTION LeftS(s:string; n:integer):string;
  50. BEGIN
  51.   LeftS:=copy(s,1,n);
  52. END;
  53.  
  54. FUNCTION RightS(s:string; n:integer):string;
  55. BEGIN
  56.   RightS:=copy(s,length(s)-n+1,n);
  57. END;
  58.  
  59. FUNCTION value(I : string) : integer;
  60. VAR n,n1 : integer;
  61. BEGIN
  62.   val(i,n,n1);
  63.   IF n1 <> 0 THEN BEGIN
  64.     i  :=  copy(i,1,n1-1);
  65.     val(i,n,n1)
  66.   END;
  67.   value  :=  n;
  68. END;
  69.  
  70.  
  71. FUNCTION TransformString(s:string):string;
  72. VAR x:integer;
  73. BEGIN
  74.   StripEndString(s);
  75.   FOR x:=1 TO Length(s) DO
  76.     s[x]:=upcase(s[x]);
  77.   TransformString:=s;
  78. END;
  79.  
  80. PROCEDURE StripEndString(VAR s:string);
  81. { Strips off the end of a string }
  82. BEGIN
  83.   WHILE (length(s)>0) AND (s[length(s)]=' ') DO
  84.     delete(s,length(s),1);
  85. END;
  86.  
  87. FUNCTION cstr(i : longint) : string;
  88. VAR c : string;
  89. BEGIN
  90.   str(i,c);
  91.   cstr  :=  c;
  92. END;
  93.  
  94.  
  95. FUNCTION ZExpand(i:LongInt; len:byte):string;
  96. VAR
  97.   negative:boolean;
  98.   result:string;
  99.   x:byte;
  100.  
  101. BEGIN
  102.   Negative:=i<0;
  103.   IF negative then i:=-i;
  104.   result:=cstr(i);
  105.   FOR x:=length(result) TO len-1 DO
  106.     result:='0'+result;
  107.   IF negative THEN result[1]:='-';
  108.   ZExpand:=Result
  109. END;
  110.  
  111. FUNCTION Dup(c:char; n:integer):string;
  112. VAR
  113.   s:string;
  114. BEGIN
  115.   IF n IN [1..255] THEN
  116.   BEGIN
  117.     FillChar(s[1],n,c);
  118.     s[0]:=chr(n);
  119.     Dup:=s;
  120.   END ELSE dup:='';
  121. END;
  122.  
  123. FUNCTION GoLeft(s:string; i:byte):byte;
  124. { A simple word left function... needs improvement }
  125. BEGIN
  126.   IF i>length(s) THEN i:=length(s);
  127.   IF i>2 THEN
  128.   REPEAT
  129.     dec(i);
  130.   UNTIL (i=1) OR (s[i-1] = ' ')
  131.   ELSE i:=1;
  132.   GoLeft:=i;
  133. END;
  134.  
  135.  
  136.  
  137. FUNCTION GoRight(s:string; i:byte):byte;
  138. { A very simple Word Right function... Could be improved }
  139. BEGIN
  140.   IF i<=length(s) THEN
  141.   REPEAT
  142.     inc(i)
  143.   UNTIL (i=length(s)) OR (s[i] =' ');
  144.   GoRight:=i+1
  145. END;
  146.  
  147. FUNCTION LengthW(s:string):integer;
  148. VAR l,i:integer;
  149. BEGIN
  150.   l:=0;
  151.   FOR i:=1 TO Length(s) DO
  152.   BEGIN
  153.     l:=l+1;
  154.     IF s[i]=^C THEN l:=l-2
  155.     ELSE IF s[i]=^H THEN l:=l-2
  156.   END;
  157.   Lengthw:=l;
  158. END;
  159.  
  160.  
  161. END.